package com.liusaidh.service;

import com.liusaidh.domain.*;
import com.liusaidh.result.Result;

import java.util.List;

public interface BlogService {

    List<AuditBlog> getMyLikeBlogList(Integer id,Integer pageNo, Integer pageSize);

    /**
     * 获得我关注的人的文章
     * @param id  我的id
     * @return 返回文章
     */
    List<AuditBlog> getMyCollectionBlogList(Integer id,Integer pageNo, Integer pageSize);

    /**
     * 发布文章
     * @param blog 文章
     * @param type 类型
     */
    void addBlog(Blog blog,String[] type);

    Result likeBlog(Integer uid, Integer bid);

    void notLikeBlog(Integer uid, Integer bid) ;

    /**
     * 获得待审核的文章，让管理员审核
     * @param pageNo  当前页码数
     * @param pageSize  每页的数量
     * @return 返回PageBean对象
     */
    PageBean getAuditBlogList(Integer pageNo, Integer pageSize);

    /**
     * 获取前10个标签
     * @return 返会一个list
     */
    List<String> getTenHotSearchBlog();

    /**
     * 模糊查询文章
     * @param condition  查询的条件
     * @return 返回list集合
     */
    List<String> getSearchBlogByLike(String condition);

    /**
     * 按热度获取全部的文章，展示在登录和未登陆的首页
     * @param pageNo  当前的页码数，默认1
     * @param pageSize 每页的数量  默认10
     * @return  返回list集合
     */
    List<AuditBlog> getAllBlog(Integer pageNo,Integer pageSize);

    /**
     * 获得图片的地址
     * @param id 文章的id
     * @return 返回图片地址
     */
    String[] getBlogPictureUrl(Integer id);

    void addBlogToDraftBox(Blog blog);

    void collectOtherBlog(Integer uid, Integer bid, String msg);

//    /**
//     * 获取我的文章和我转发的文章
//     * @param id 我的id
//     * @return  返回一个list集合
//     */
//    List<AuditBlog> getMyBlog(Integer id);

    /**
     * 获取我的草稿箱的文章
     * @param id  我的id
     * @return 返回list集合
     */
    List<AuditBlog> getMyDraftBox(Integer id);

    /**
     * 通过审核
     * @param id 文章的id
     * @return 返回受影响的行数
     */
    int passTheAudit(Integer id);

    /**
     * 用户发表一级评论
     * @param id  文章的id
     * @param id1  当前登录用户的id
     * @param comment 评论的内容
     * @return  返回受影响的行数
     */
    Result publishFirstComment(Integer id, Integer id1, String comment);

    /**
     * 发表二级评论
     * @param uid 用户的id值
     * @param firstCommentId  一级评论的id
     * @param comment  评论的内容
     * @return  返回受影响的行数
     */
    int publishSecondComment(Integer uid, Integer firstCommentId, String comment);

    /**
     *获取文章的评论
     * @param id 文章的id
     * @return 返回评论
     */
    List<UserReviews> getBlogComment(Integer id);

    /**
     * 获得我关注的文章
     * @param id 我的id
     * @return 返回list集合
     */
    List<AuditBlog> getMyConnectionBlog(Integer id,Integer pageNo, Integer pageSize);

//    void deleteFirstComment(Integer id);
//
//    void deleteSecondComment(Integer id);

    /**
     * 转发文章
     * @param uid  用户的id
     * @param bid  文章的id
     * @param message  转发时记录的信息
     * @return  返回行数
     */
    int forwardTheBlog(Integer uid, Integer bid, String message);


    void notCollectOtherBlog(Integer id, Integer id1);

    PageBean getHotBlogForManager(Integer pageNo, Integer pageSize);

    /**
     * 删除热搜
     * @param label 标签
     * @return 返回受影响的行数
     */
    int deleteHotSearchBlog(String label);

    List<String> getHotBlog();

    /**
     * 判断是不是我点赞的文章
     * @param myId 我的id
     * @param blogIg 文章的id
     * @return true：是  false：不是
     */
    boolean judgeBlogOfLike(Integer myId, Integer blogIg);
    /**
     * 判断是不是我点赞的文章
     * @param myId 我的id
     * @param blogIg 文章的id
     * @return true：是  false：不是
     */
    boolean judgeBlogOfCollection(Integer myId, Integer blogIg);
    /**
     * 判断是不是我点赞的文章
     * @param myId 我的id
     * @param blogIg 文章的id
     * @return true：是  false：不是
     */
    boolean judgeBlogOfTransmit(Integer myId, Integer blogIg);

    /**
     * 不通过审核
     * @param id  文章的id
     * @return 返回受影响的行数
     */
    int notPassTheAudit(Integer id);

    /**
     * 获得近两天的热搜文章
     * @return 返回热搜文章
     */
    List<AuditBlog> getTheLatestHotBlog(Integer pageNo,Integer pageSize);

    /**
     * 根据标签模糊查询
     * @param label 标签
     * @return  返回list集合
     */
    List<AuditBlog> getSearchAuditBlogByLike(String label,Integer pageNo,Integer pageSize);

    /**
     * 查询类别
     * @param condition 查询条件
     * @return  返回数据
     */
    List<String> getTypeByLike(String condition);

    /**
     * 获得我的所有的文章(还有我转发的文章)，包括还未审核的文章
     * @param id  用户的id
     * @return  返回我的文章
     */
    List<MyBlog> getAllMyBlog(Integer id,Integer pageNo,Integer pageSize);

    /**
     * 获得近五天的热搜文章
     * @return  返回热搜文章
     */
    List<AuditBlog> getTheLatestHotBlogForLogin();

    /**
     * 查询所有的类别和 包含类别的文章的数量
     * @return  返回全部的类别让管理员管理
     */
    PageBean getAllTypeForManager(Integer pageNo,Integer pageSize,String type);


    /**
     * 获取类别的数量
     * @return 返回类别的数量
     */
    Long getAllTypeCount();

    /**
     * 删除类别
     * @param id 类别的id
     * @return  返回影响的行数
     */
    int deleteType(Integer id);

    /**
     * 添加类别
     * @param type 添加的类别
     * @return 返回受影响的行数
     */
    int addType(String type);

    /**
     * 获得我关注的人近两天的文章
     * @param id 我的id
     * @return  返回集合
     */
    List<AuditBlog> getMyLatestConnectionBlog(Integer id,Integer pageNo,Integer pageSize);

    /**
     * 获取将要加载的文章
     * @param pageNo  当前的页码数
     * @param pageSize 每页的数量
     * @return  返回list集合
     */
    List<AuditBlog> getTheLoadedBlog(Integer pageNo, Integer pageSize);

    /**
     * 删除文章
     * @param id
     * @return
     */
    Result deleteTheBlog(Integer id);

    /**
     * 点赞评论
     * @param uid 用户的id
     * @param commentId 评论的id
     * @return 返回受影响的行数
     */
    Result likeComment(Integer uid, Integer commentId);

    /**
     * 取消点赞评论
     * @param uid 用户的id
     * @param commentId 评论的id
     * @return 返回受影响的行数
     */
    int notLikeComment(Integer uid, Integer commentId);

    /**
     * 判断该评论是不是被用户点赞
     * @param uid 用户的id
     * @param commentId 评论的id
     * @return
     */
    boolean judgeCommentOfLike(Integer uid, Integer commentId);

    /**
     * 用户举报文章
     * @param uid 用户的id
     * @param bid 文章的id
     * @param msg 举报的原因
     * @return 返回受影响的行数
     */
    Result reportBlog(Integer uid, Integer bid, String msg);


    /**
     * 用户删除评论
     * @param id  评论的id
     * @return  返回受影响的行数
     */
    int deleteComment(Integer id);

    /**
     * 根据条件查询所有的标签，没有条件就查询所有的标签
     * @param condition 查询的条件
     * @return 返回所有的标签
     */
    List<String> getLabelByLike(String condition);

    /**
     * 查询标签给管理员
     * @param pageNo 当前的页码数
     * @param pageSize 每页的数量
     * @return 返回PageBean对象
     */
    PageBean getLabelForManager(Integer pageNo, Integer pageSize);

    /**
     * 根据id删除标签
     * @param id  标签的id
     * @return 返回数据
     */
    int deleteHotLabel(Integer id);

    /**
     * 查询所有的被举报的文章给管理员
     * @return 返回list集合
     */
    PageBean getReportForManager(Integer pageNo,Integer pageSize);

    /**
     * 通过文章的id获取文章
     * @param id 文章的id
     * @return 返回AuditBlog对象
     */
    AuditBlog getAuditBlogById(Integer id);

    /**
     * 通过举报
     * @param id 文章的id
     * @return  返回行数
     */
    int passReport(Integer id);

    /**
     * 驳回举报
     * @param id 文章的id
     * @return  返回行数
     */
    int notPassReport(Integer id);



    PageBean testPageHelper(Integer pageNo, Integer pageSize, Integer condition);
}